﻿using Circus.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;

namespace Teal.Club {

    /// <summary>
    /// 提供文章相关接口。
    /// </summary>
    public static class ArticleController {

        private const string articlesFilePath = "~/articles/";

        /// <summary>
        /// 更新文章。
        /// </summary>
        /// <param name="id">如果更新文章则传入文章序号，否则传入 0。</param>
        /// <param name="parentId">之前版本的文章，如果是第一版则传入 0。</param>
        /// <param name="categoryId">文章的分类序号。</param>
        /// <param name="path">文章的简短路径。</param>
        /// <param name="title">文章标题。</param>
        /// <param name="tags">文章标签。</param>
        /// <param name="summary">文章简介。</param>
        /// <param name="content">文章正文。</param>
        /// <returns>返回更新后的文章序号，如果更新失败则返回 0。</returns>
        [post]
        public static object add(long parentId, int categoryId, string path, string title, string tags, string summary, string content) {
            using (var conn = DbHelper.createConnection()) {
                var cmd = conn.createProcedure("article_add");
                cmd.Parameters.AddWithValue("@parentId", parentId);
                cmd.Parameters.AddWithValue("@categoryId", categoryId);
                cmd.Parameters.AddWithValue("@path", path);
                cmd.Parameters.AddWithValue("@title", title);
                cmd.Parameters.AddWithValue("@tags", tags);
                cmd.Parameters.AddWithValue("@summary", summary);
                cmd.Parameters.AddWithValue("@content", content);
                cmd.Parameters.AddWithValue("@authorId", UserController.currentUser.id);
                return cmd.ExecuteScalar().ToString();
            }
        }

        /// <summary>
        /// 更新文章。
        /// </summary>
        /// <param name="id">如果更新文章则传入文章序号，否则传入 0。</param>
        /// <param name="parentId">之前版本的文章，如果是第一版则传入 0。</param>
        /// <param name="categoryId">文章的分类序号。</param>
        /// <param name="path">文章的简短路径。</param>
        /// <param name="title">文章标题。</param>
        /// <param name="tags">文章标签。</param>
        /// <param name="summary">文章简介。</param>
        /// <param name="content">文章正文。</param>
        /// <returns>如果操作成功返回空字符串，否则返回错误原因。</returns>
        [post]
        public static string update(long id, long parentId, int categoryId, string path, string title, string tags, string summary, string content) {
            using (var conn = DbHelper.createConnection()) {
                var cmd = conn.createProcedure("article_update");
                cmd.Parameters.AddWithValue("@id", id);
                cmd.Parameters.AddWithValue("@parentId", parentId);
                cmd.Parameters.AddWithValue("@categoryId", categoryId);
                cmd.Parameters.AddWithValue("@path", path);
                cmd.Parameters.AddWithValue("@title", title);
                cmd.Parameters.AddWithValue("@tags", tags);
                cmd.Parameters.AddWithValue("@summary", summary);
                cmd.Parameters.AddWithValue("@content", content);
                cmd.Parameters.AddWithValue("@authorId", UserController.currentUser.id);
                if (cmd.ExecuteNonQuery() > 0) {
                    return String.Empty;
                }
            }
            return "文章不存在或已删除，或者您没有权限操作";
        }

        /// <summary>
        /// 删除评论。
        /// </summary>
        /// <param name="id">要删除的评论序号。</param>
        /// <returns>如果操作成功返回空字符串，否则返回错误原因。</returns>
        public static string delete(long id) {
            using (var conn = DbHelper.createConnection()) {
                var cmd = conn.createProcedure("article_delete");
                cmd.Parameters.AddWithValue("@id", id);
                cmd.Parameters.AddWithValue("@authorId", UserController.currentUser.id);
                if (cmd.ExecuteNonQuery() > 0) {
                    return String.Empty;
                }
                return "文章不存在或已删除，或者您没有权限操作";
            }
        }

    }

}
